package com.stu.day15;

import java.io.File;
import java.io.IOException;

/**
 * File(String pathname)：根据路径创建 File 对象，路径可以是绝对路径或相对路径。
 * File(String parent, String child)：根据父路径和子路径创建 File 对象。
 * File(File parent, String child)：根据父目录和子路径创建 File 对象。
 *
 * boolean exists();//判断文件是否存在.
 * boolean createNewFile();//创建文件
 * String getName();//获取文件的名称(如果是文件实例的话,包括后缀)
 * String getParentFile();//获取父目录
 * String getAbsolutePath();//获取绝对路径
 * String getPath();//获取相对路径
 * boolean mkdir();//创建单个文件夹
 * boolean mkdirs();//同时创建多个文件夹
 * boolean delete();//删除文件/文件夹,但是只能是空文件夹.删除成功,返回true
 * boolean isFile();//判断是否为文件.
 * boolean isDirectory();//判断是否为目录.
 * isHidden()：检查文件是否是隐藏文件。
 *
 * @author zy
 * @date 2025/2/13 10:13
 */
public class FileDemo {
    public static void main(String[] args) {
//        createFile("src/com/stu/day15/test1.txt");  // 创建test1.txt文件
//        createFile("src/com/stu/day15/test2");  // 创建test2文件
//        deleteFile("src/com/stu/day15/test2");  // 删除test2文件

//        createFolders("src/com/stu/day15/demo1");  // 创建demo1文件夹
//        createFolders("src/com/stu/day15/demo2");  // 创建demo2文件夹
//        deleteFolder("src/com/stu/day15/demo2");  // 创建demo2文件夹

        //桌面创建文件/文件夹
//        for (int i = 0;i < 3;i++) {
//            String path = "D:\\Desktop\\"+i+".txt";
//            createFile(path);
//            deleteFile(path);  // 删除的文件不会进回收站

//            createFolders(path);
//            deleteFolder(path);
//        }

//        listFile("src","java");  // 输出src目录下所有java结尾文件
    }

    //TODO 创建文件
    public static void createFile(String path) {
        File file = new File(path);

        if (file.exists()) {
            System.out.println(file+" 文件已存在");  //相对路径,相当于file.getParh
            return;
        }
        try {
            if(file.createNewFile()){
                System.out.println(file.getName()+" 文件创建成功");

                System.out.println("文件的父目录: "+file.getParentFile());  // src\com\stu\day15
                System.out.println("绝对路径: "+file.getAbsolutePath());//D:\Desktop\cx\corejava\src\com\stu\day15\test1.txt
                System.out.println("相对路径: "+file.getPath());  // src\com\stu\day15\test1.txt
            }
            else System.out.println(file.getName()+" 文件创建失败");  // 可能没权限导致失败

        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

    //TODO 删除文件
    public static void deleteFile(String path){
        File file = new File(path);
        if(!file.exists()){
            System.out.println(file+" 文件不存在");
            return;
        }
        if(file.isFile()){
            if(file.delete()){
                System.out.println(file+"删除成功!");
            }else{
                System.out.println(file+"删除失败!");
            }
        }else{
            System.out.println(file+"不是一个文件!");
        }
    }

    //TODO 创建文件夹
    public static void createFolders(String path){
        File file = new File(path);
        if(!file.exists()){
            if(file.mkdirs()){  // mkdirs允许创建多个文件.mkdir只允许创建单个
                System.out.println(file.getName()+" 目录创建成功!");
            }else{
                System.out.println(file+" 目录创建失败!");
            }
        }
        else System.out.println(file.getName()+" 目录已存在");
    }

    //TODO 删除文件夹(只能删除空目录)
    public static void deleteFolder(String path){
        //file可能是文件的实例,文件夹的实例
        File file = new File(path);
        if(!file.exists()){
            System.out.println(file+" 不存在!");
            return;
        }
        if(file.isDirectory()){
            System.out.println(file+" 不是一个目录!");
            return;
        }
        //删除非空目录
        if(file.delete()){
            System.out.println(file+" 空目录删除成功!");
        }else{
            System.out.println(file+" 删除失败!可能是一个非空目录!");
        }
    }

    //TODO 给定一个目录,然后将这个目录下的所有的.java文件都输出.
    public static void listFile(String path,String endName){
        File file = new File(path);
        File[] files = file.listFiles();

        if(files == null){
            System.out.println("不存在此目录");
        }
        else if(files.length == 0){
            System.out.println(file+" 是空目录");
        }
        else{
            for (File f : files) {
                if(f.isFile() && f.getName().endsWith(endName)){
                    System.out.println(f);  // 输出符合要求的文件
                } else if (f.isDirectory()) {
                    listFile(f.getAbsolutePath(), endName);  // 文件夹递归
                }
            }
        }
    }

    //TODO 删除非空文件夹
    public static void deleteAll(String path){
        File file = new File(path);
        if(!file.exists()) {
            System.out.println(file+" 不存在");
            return;
        }

        File[] files = file.listFiles();
        if(files==null){
            System.out.println("无法读取文件夹: " + file.getPath());
            return;
        }

        for (File f : files) {
            if (f.isFile()) {
                f.delete();
            } else if (f.isDirectory()) {
                deleteAll(f.getPath());
            }
        }
        file.delete();
    }

}
